#include "mywidget.h"

MyWidget::MyWidget() : QMainWindow()
{
    setFixedSize(1200,600);

    //-------Recuperation du chemin ou se trouve l'executable de l'application
    mw_cheminExecutable = QCoreApplication::applicationDirPath();
    mw_cheminDossierStockage = mw_cheminExecutable + "/import/image" ;

    //-------Creation du menu et des sous-menu
    mw_actionImportImage = new QAction("&Importer une image", this);
    connect(mw_actionImportImage, SIGNAL(triggered()), this, SLOT(ouvrirDialogueImportImage()));

    mw_actionQuitter = new QAction("&Quitter", this);
    connect(mw_actionQuitter, SIGNAL(triggered()), this, SLOT(ouvrirDialogueQuitter()));

    mw_menuFichier = menuBar()->addMenu("&Chargement Fichier");
    mw_menuFichier->addAction(mw_actionImportImage);
    mw_menuFichier->addAction(mw_actionQuitter);

    //-------Creation de la barre d'outils et des options de la barre d'outils
    mw_infoComboBoxCouleur = new QLabel();
    mw_infoComboBoxCouleur->setText("Couleur dessin");

    QStringList listeCouleurs;
    listeCouleurs << "Noir" << "Blanc" << "Rouge" << "Vert" << "Bleu";
    mw_choixCouleur = new QComboBox();
    mw_choixCouleur->addItems(listeCouleurs);

    mw_toolbarOption = addToolBar("Chargement Fichier");
    mw_toolbarOption->addWidget(mw_infoComboBoxCouleur);
    mw_toolbarOption->addWidget(mw_choixCouleur);

    //-------Création de la liste des images contenues dans le dossier de stockage
    QStringList filtreFichier;
    filtreFichier << "*.png" << "*.gif" << "*.jpg" << "*.jpeg";
    QDirIterator parcoursDossierStockage (mw_cheminDossierStockage, filtreFichier, QDir::Files); //Iterateur nécessaire au parcours du dossier de stockage
    QStringList listeFichier; //contient la liste des images contenues dans le dossier de stockage
    while(parcoursDossierStockage.hasNext()) //on parcours le dossier de stockage
    {
        parcoursDossierStockage.next(); //on ajoute les images à la liste
        listeFichier << parcoursDossierStockage.fileName(); //on ajoute les images à la liste
    }

    //-------Creation de la zone centrale de l'application
    mw_zoneCentrale = new QWidget;
    mw_choixImage = new QComboBox;
    mw_afficheImage = new QLabel;
    mw_informationImage = new QWidget;
    mw_largeurImage = new QLineEdit;
    mw_hauteurImage = new QLineEdit;
    mw_poidImage = new QLineEdit;

    mw_choixImage->addItems(listeFichier);
    connect(mw_choixImage, SIGNAL(currentIndexChanged(int)), this, SLOT(affichageImage()));

    mw_largeurImage->setReadOnly(true);
    mw_hauteurImage->setReadOnly(true);
    mw_poidImage->setReadOnly(true);

    mw_layoutZoneCentrale = new QFormLayout;
    mw_layoutZoneCentrale->addRow(mw_choixImage);
    mw_layoutZoneCentrale->addWidget(mw_afficheImage);
    mw_layoutZoneCentrale->addWidget(mw_informationImage);

    QFormLayout*blayout = new QFormLayout;
    blayout->addRow("Largeur de l'image: ", mw_largeurImage);
    blayout->addRow("Hauteur de l'image: ", mw_hauteurImage);
    blayout->addRow("Poid de l'image: ", mw_poidImage);

    mw_zoneCentrale->setLayout(mw_layoutZoneCentrale);
    mw_informationImage->setLayout(blayout);
    setCentralWidget(mw_zoneCentrale);
}

//Importation d'une image et copie de l'image dans le dossier de stockage de l'application
void MyWidget::ouvrirDialogueImportImage()
{
    //Recuperation du chemin d'accès au fichier image sélectionné
    QString cheminFichier = QFileDialog::getOpenFileName(this, "Choisir une image", "/home", "Images (*.png *.gif *.jpg *.jpeg");
    if(!cheminFichier.isEmpty())
    {
        //Recuperation des informations sur le fichier (nom du fichier + extension)
        QFileInfo informationFichier(cheminFichier);
        QString nomCompletFichier = informationFichier.fileName();

        //Creation du dossier de stockage à la racine du dossier de projet
        QDir cheminDossierStockage(mw_cheminDossierStockage);
        if (!cheminDossierStockage.exists())
        {
            cheminDossierStockage.mkpath(mw_cheminDossierStockage);
        }

        //Creation du chemin vers lequel on va stocker l'image sélectionnée
        QString cheminStockageImage = mw_cheminDossierStockage + nomCompletFichier;

        //Copie du fichier dans le dossier de stockage de l'application
        QFile file(cheminFichier);
        file.copy(cheminStockageImage);

        //Mise à jour de la liste des images disponibles
        mw_choixImage->addItem(nomCompletFichier);
    }
}

void MyWidget::ouvrirDialogueQuitter()
{
    QMessageBox mw_messageBox;;
    QPushButton *yesButton  = mw_messageBox.addButton(QMessageBox::Yes);
    mw_messageBox.addButton(QMessageBox::No);
    mw_messageBox.setText("Etes vous sur de vouloir quitter l'application?");
    mw_messageBox.setIcon(QMessageBox::Question);
    mw_messageBox.exec();

    if(mw_messageBox.clickedButton() == yesButton)
    {
        QApplication::quit();
    }
}

void MyWidget::affichageImage()
{
    QString cheminImage =  mw_cheminDossierStockage +"/"+ mw_choixImage->currentText();
    QImage image(cheminImage);
    mw_afficheImage->setPixmap(QPixmap::fromImage(image));

    mw_largeurImage->setText(QString::number(image.width()) + " pixel");
    mw_hauteurImage->setText(QString::number(image.height()) + " pixel");
    mw_poidImage->setText(QString::number(image.byteCount()) +" octet");
}
